package Coleccion;

public class ColeccionConArreglo<E> implements Coleccion<E>{

	private E [] arreglo;
	private int cantidad;
	
	public ColeccionConArreglo(){
		arreglo = (E[]) new Object[2];
		cantidad = 0;
	}
	
	public void insertar(E elemento) {
		if (cantidad == arreglo.length )
			resize();
		
		if (! pertenece(elemento) )
			arreglo[cantidad++] = elemento;
	}

	
	public boolean pertenece(E elemento) {
		boolean pertenece = false;
		for(int i=0; i<cantidad && !pertenece; i++)
			pertenece = (arreglo[i] == elemento);
		return pertenece;
	}

	
	public void eliminar(E elemento) {
		for(int i=0; i<cantidad; i++){
			if (arreglo[i] == elemento)
				desplazar_izquierda_desde(i);
		}
		cantidad--;
	}
	
	public void mostrar(){
		for(int i = 0; i<cantidad; i++)
			System.out.println("A["+i+"]= " + arreglo[i]);
	}
	
	private void resize(){
		E [] arreglo_aux = (E[]) new Object[arreglo.length * 2];
				
		for(int i=0; i<cantidad; i++)
			arreglo_aux[i] = arreglo[i];
		arreglo = arreglo_aux;
	}
	
	private void desplazar_izquierda_desde(int indice){
		while(indice+1 < arreglo.length){
			arreglo[indice] = arreglo[indice+1];
			indice++;
		}
		arreglo[indice] = null;
	}
}
